package cn.tannn.tcache.core;

import cn.tannn.tcache.server.TcacheHandler;
import io.netty.channel.ChannelHandlerContext;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 回复的处理 ， switch(ReplyType){处理(value)} {@link TcacheHandler#replyContext(ChannelHandlerContext, Reply)}
 *
 * @author <a href="https://t.tannn.cn/">tnnn</a>
 * @version V1.0
 * @date 2024/6/19 下午8:09
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Reply<T> {
    /**
     * 回复数据
     */
    T value;

    /**
     * 数据类型
     */
    ReplyType type;


    /**
     * 单行字符串
     * @param value 返回给客户端的数据
     */
    public static Reply<String> string(String value) {
        return new Reply<>(value, ReplyType.SIMPLE_STRING);
    }

    /**
     * 定长字符串
     * @param value 返回给客户端的数据
     */
    public static Reply<String> bulkString(String value) {
        return new Reply<>(value, ReplyType.BULK_STRING);
    }

    /**
     * 整型数字
     * @param value 返回给客户端的数据
     */
    public static Reply<Integer> integer(Integer value) {
        return new Reply<>(value, ReplyType.INT);
    }


    /**
     * 错误消息
     * @param value 返回给客户端的数据
     */
    public static Reply<String> error(String value) {
        return new Reply<>(value, ReplyType.ERROR);
    }

    /**
     * RESP数组
     * @param value 返回给客户端的数据
     */
    public static Reply<String[]> array(String[] value) {
        return new Reply<>(value, ReplyType.ARRAY);
    }
}
